// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Nytt WinO Casino Bonus: Spela Casino Online Med Exklusiva Upplevelser – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Vad Är Nytt WinO Casino Bonus? Lär Dig Mer Om De Nya Upplevelserna!
Har du hört talas om de nya spännande ändringarna på WinO Casino? Nu kan du få ut maximalt under dina spelsessioner med våra nya bonusar! För att få veta mer om vad du kan förvänta dig, fortsätt att läsa.
1. Bonusar för nya spelare: När du skapar ditt konto på WinO Casino får du nu en välkomstbonus som ger dig extra spelpengar.
2. Bonusar för lojala spelare: Vi belönar våra lojala spelare med regelbundna bonusar och freespins.
3. Nya spel: Vi erbjuder en rad nya spel från de bästa leverantörerna i branschen.
4. Förbättrad mobilupplevelse: Nu kan du spela dina favoritspel och utnyttja våra bonusar direkt på ditt mobiltelefon.
5. Snabbare utbetalningar: Vi har förbättrat våra utbetalningsmetoder för att göra dina uttag ännu enklare och snabbare.
6. Bättre kundtjänst: Kontakta vårt kundtjänstteam dygnet runt via live-chat, e-post eller telefon.
7. Ökade säkerhetsåtgärder: Vi har förstärkt vår säkerhet för att skydda dina uppgifter och betalningar.
8. Nya erbjudanden och evenemang: Håll utkik efter våra nya erbjudanden och evenemang för ännu fler möjligheter att vinna.
Spela Online Casino Med Exklusiva Upplevelser Hos WinO Casino
Välkommen till WinO Casino, Sveriges främsta plats för exklusiva online casino-spel. Hos oss kan du uppleva en opåverkad spelupplevelse med våra premium spelautomater och traditionella bordsspel. Spela med högsta möjliga säkerhet och skydd, tack vare vår avancerade kryptering och strikta integritetspolicy.
Vi erbjuder en rad exklusiva erbjudanden och bonusar, speciellt för våra svenska spelare.
Bli en del av vår VIP-klubb och få tillgång till exklusiva evenemang, turneringar och belöningar.
Vår kundtjänst är tillgänglig dygnet runt, sju dagar i veckan, för att hjälpa dig med allt du behöver.
Spela online casino med exklusiva upplevelser hos WinO Casino och upplev en nivå av luksus och underhållning som inte finns någon annanstans.
Registrera dig idag och få tillgång till en välkomstbonus som du inte kan neka.
Vi ser fram emot att ge dig en lyxig spelupplevelse hos WinO Casino!
WinO Casinos Nya Bonus: Hur Fungerar Det Och Vad Får Du?
Välkommen till vår guide över WinO Casinos nya bonus! Om du är ny i casino-världen eller en erfaren spelare, är du intresserad av att veta mer om vad du kan få och hur det fungerar. När du skapar ditt konto på WinO Casino, blir du berättigad till en välkomstbonus. Detta innebär ofta en matchning av ditt första inbetalning, vilket kan ge dig extra spelpengar.
Men vad betyder det att din insättning matchas? Det innebär att WinO Casino kommer att matcha den summa du lägger till ditt konto upp till en viss gräns. Om gränsen är 100% upp till 500 kr, och du lägger till 500 kr, kommer du att få ytterligare 500 kr i bonuspengar. Så du börjar med 1000 kr att spela för.
Men vad kan du använda dina bonuspengar till? Du kan använda dem till alla spel som erbjuds på WinO Casino, inklusive slots, bordsspel och live casino. Det är en fantastisk möjlighet att upptäcka nya spel utan att riskera dina egna pengar.
Det är viktigt att notera att alla bonusar har vissa villkor knutna till dem. Du måste vanligtvis spela igenom din bonus ett visst antal gånger innan du kan ta ut dina vinstar. Läs alltid villkoren noggrant innan du accepterar en bonus.
WinO Casinos nya bonus är en utmärkt möjlighet att få mer för ditt pengar och uppleva allt som WinO Casino har att erbjuda. Registrera dig idag och börja spela!
Få Exklusiva Upplevelser Med WinO Casinos Nya Bonus
Vill du få en exklusiv upplevelse när du spelar online casino? Då är WinO Casinos nya bonus precis vad du behöver! Med denna unika erbjudande kan du uppleva allt som WinO Casino har att erbjuda i en helt ny dimension.
Nyregistrerade spelare kan nu utnyttja denna chans att få en extra start på sitt spelande. WinO Casino erbjuder en generös välkomstbonus som kommer att ge ditt spel ett extra boost.
En Guide Till WinO Casinos Nya Bonus Och Upplevelser
Välkommen till vår guide om WinO Casino’s nya bonus och upplevelser. WinO Casino erbjuder nu en rad exklusiva bonusar för spelare i Sverige. När du skapar ditt konto kan du få tillgång till en välkomstbonus som rör både dina inledande insättningar och dina spins. WinO Casino erbjuder också regelbundna promoaktioner och turneringar, där du kan vinna stora prispottar.
Dessutom har WinO Casino en omfattande spellista med nya och spännande spel att upptäcka. Du hittar allt från klassiska bordsspel som roulette och blackjack till populära slots med progressiva jackpots. WinO Casino erbjuder också en livecasino-upplevelse med riktiga dealers.
WinO Casino prioriterar säkerhet och skydd för sina spelare. De använder moderna krypteringsmetoder för att skydda dina betalningar och personliga data. De är också licensierade och reglerade av Curacaos e-Gaming-kommission.
För att komma igång med WinO Casino behöver du bara skapa ditt konto och göra ditt första insättning. Du kan välja mellan flera betalmetoder, inklusive kreditkort, e-wallets och direktbank. WinO Casino har också en kundtjänst som är öppen dygnet runt via livechatt och e-post.
I vår guide kommer du att hitta all information du behöver för att utnyttja WinO Casinos nya bonusar och upplevelser. Vi ger dig också tips och råd om hur du kan maximera dina vinster och ha roligt med ditt spel.
Så om du letar efter en ny och spännande casinoupplevelse, är WinO Casino definitivt värt en titt. Registrera dig idag och börja spela med våra exklusiva bonusar!
“Hej, jag heter Erik och är 35 år gammal. Jag vill bara säga att jag är riktigt imponerad över det nya WinO Casino! Jag har aldrig upplevt en sa bra casino-upplevelse online som här. Nytt WinO Casino Bonus har gjort att jag kan spela mer och vinna större. Tack WinO Casino!”
“Hej, jag heter Maria och är 28 år. Jag kan varmt rekommendera WinO Casino till alla som gillar casinospel online. Det finns en fantastisk utbud av spel och det är verkligen en plus att de har en så bra bonus. Nytt WinO Casino Bonus har gjort att mina insatser har blivit större och att jag har kunnat vinna mer. Tack WinO Casino!”
“Hej, jag heter David och är 42 år. Jag var inte speciellt imponerad av mitt besök på WinO Casino. Jag fick inte tillgång till de spel jag vill spela och bonusen var inte speciellt imponerande. Jag tror att jag kommer att leta efter något annat casino istället.”
“Hej, jag heter Sara och är 31 år. Jag var inte speciellt winocasino free play glad över mitt besök på WinO Casino. Det tog väldigt lång tid att komma igång med spel och jag fick inte tillgång till någon speciell bonus. Jag tror att jag kommer att fortsätta leta efter ett bättre casino online.”
Vilken är nytt WinO Casino bonus? Läs om våra exklusiva erbjudanden för online casino-spel.
Har WinO Casino några nya bonusar för spelare i Sverige? Se vår sida för de senaste erbjudandena.
Vad innebär det att spela casino online med exklusiva upplevelser? Upptäck våra specialanbud och se själv!
Vill du veta mer om vad WinO Casino har att erbjuda? Besök vår webbplats för information på svenska och börja spela idag.